ホームに戻る
出典 :
関連 :
目次 :
WPFのエントリポイント (C#)
C#のアプリケーションは Main() メソッドから開始されるが、WPFも例外ではない。
(すべて小文字の main() ではない点に注意)
但しWPFの場合はWindows Formsと異なり、Main() メソッドを含むソースファイル(App.g.cs)が自動生成され、プロジェクトに追加されない。
App.g.cs (コメントのみ改変)
(略)
namespace Console_ELP03 {
/// アプリケーション
public partial class App : System.Windows.Application {
/// InitializeComponent
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "6.0.1.0")]
public void InitializeComponent() {
#line 5 "..\..\..\App.xaml"
this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative); //< 最初に開かれるウィンドウ
#line default
#line hidden
}
/// Application Entry Point.
/// アプリケーションのエントリポイント( Main() )
[System.STAThreadAttribute()]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "6.0.1.0")]
public static void Main() {
Console_ELP03.App app = new Console_ELP03.App();
app.InitializeComponent();
app.Run();
}
}
}
ここで、Main() メソッドはアプリケーションの生成と起動を行っている。
また、その中で呼ばれる InitializeComponent() はスタートアップウィンドウの設定を行っている。
(このスタートアップウィンドウは App.xaml で StartUpUri として指定されたもの。)
Main() メソッドを編集する
通常の用途では、アプリケーション全体の初期化はスタートアップウィンドウのコンストラクタに記述すればよいが、
スタートアップウィンドウが開く前に処理を行いたい場合は、Main() メソッドを独自に定義する。
但し、単にコマンドライン引数を受け取るだけであれば Main() メソッドを編集する必要は無い。
コマンドライン引数の受け取り(スタートアップ)を参照。
手順
-
「ソリューション エクスプローラー」上で App.xaml を選択、右クリックし「プロパティ」を開く。
-
「ビルド アクション」を「ApplicationDefinition(アプリケーション定義)」から「Page(ページ)」に変更すると、
Main() メソッドが自動生成されなくなる。

-
App.xaml.csを開き、Main() メソッドを追加する。
public partial class App : Application
{
[STAThread]
public static void Main()
{
App app = new App();
app.InitializeComponent();
// スプラッシュスクリーン、スタートアップウィンドウ表示
app.Run();
// app.Run() より後は、スタートアップウィンドウを閉じた後に実行される
}
}
ここで、属性として [STAThread] が指定されているが、これはCOMオブジェクトの取り扱いを定めるもので、WPFでは標準となっている。
記述を省略することはできないので注意。
また、app.Run() 終了後はアプリケーションオブジェクトが存在しなくなるため、ウィンドウを開くことができなくなる(要調査)。
上記手順が失敗する場合

環境の設定によっては上図のエラーが表示され、App.xaml のプロパティが変更できないことがある。
(エラーが発生した場合、そのまま App.xaml がプロジェクトから除外される。)
これは、App.xaml の「ビルド アクション」のデフォルトが「アプリケーション定義」となっているため。
以下の手順を経ることで「ビルド アクション」を変更できるようになる。
- プロジェクトファイル(CSPROJ)を編集モードで開く。
(ソリューションエクスプローラーからは、プロジェクトファイルを右クリックし「プロジェクト ファイルの編集」を選択する。)
- PropertyGroup タグ内に、以下の通りに EnableDefaultApplicationDefinition の記述を追加する。
-
プロジェクトをクリーンする。